4
תגובות

קבלת כל התוצאות ב-mysqli

פתח yossi787 ,
החלטתי לעבור מ-mysql ל-mysqli, ונתקלתי בבעיה, אני מנסה להכניס למערך את השורות (ניסיתי גם להדפיס כל שורה בתור מערך אבל לא הצליח) וזה מכניס מערך רק את השורה השנייה ועוד שורה ריקה (יש בסה"כ 3 שרות), אני כבר לא יודע מה לעות, תודה רבה לעוזרים :)
$ChatArr = array();
    if ($Chats = $mysqli->query("SELECT * FROM chat1")) {
        while($Chats->fetch_object()){
            $ChatArr[] = $Chats->fetch_assoc();
        }
    }

4 תשובות

avatar ענה Splash ב 14 לנובמבר 2014 #

ההסבר הוא מאוד פשוט ללמה זה קורה,בתוך הלולאה שלך אתה מבצע את ה fetch הראשון,אחר כך שהוא נכנס ללולאה הוא מכניס את השורה השנייה [שכן הערך הראשון כבר הודפס בתוך התנאי] ובפעם השלישית הוא שוב עושה את החלק של הלולאה רק שעכשיו הערך שמחזיק ה fetch הוא ריק משום שאין יותר שורות שנשלפו.

בכל מקרה אין טעם לממש את זה עצמאית מאחר וקיימת מתודה שמבצעת זאת עבורך - http://php.net/manual/en/mysqli-result.fetch-all.php

avatar ענה yossi787 ב 18 לנובמבר 2014 #

עברתי שרת ובאחסון הזה לפי מה שהבנתי לא מותקן "MySQL Native Driver" (לא התעמקתי בנושא)
העניין הוא שזה אחסון חינמי שיתופי אז אין לי ממש איך להתקין את זה, האם יש חלופה לmysqli_fetch_all במקרה כזה?

avatar ענה Splash ב 18 לנובמבר 2014 #

כן אתה יכול לבצע את ה -

$ChatArr[] = $Chats->fetch_assoc()

בתוך התנאי עצמו

avatar ענה ldbrgr ב 22 לנובמבר 2014 #

$ChatArr = array();
if ($Chats = $mysqli->query("SELECT * FROM chat1"))
{
  while($ChatArr[] = $Chats->fetch_assoc());
}
var_dump($ChatArr);


כמו שאמרו, fetch_assoc מחזיר מערך \ שורה בכל קריאה אליו. אתה קורה לו פעמיים, גם בתנאי של הלולאה וגם בלולאה עצמה אז הוא "מדלג" על שורות מסויימות.

או יותר טוב, תשתמש ב fetch_all

$ChatArr = array();
if ($Chats = $mysqli->query("SELECT * FROM chat1"))
{
  $ChatArr = $Chats->fetch_all(MYSQLI_ASSOC);
}
var_dump($ChatArr);